home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Topik / Topik - Disk 14 - Useful Commands (19xx)(Topik Public Domain)(PD)[WB].zip / Topik - Disk 14 - Useful Commands (19xx)(Topik Public Domain)(PD)[WB].adf / ExtractFont / EXTRACTFONT.c < prev    next >
C/C++ Source or Header  |  1989-08-07  |  5KB  |  196 lines

  1. #include <exec/types.h>
  2. #include <graphics/text.h>
  3. #include <graphics/gfxbase.h>
  4. #include <functions.h>
  5. #include <stdio.h>
  6.  
  7. struct    GfxBase        *GfxBase = 0;
  8. struct    Library        *DiskfontBase = 0;
  9. struct    TextFont    *FontPtr = 0;
  10.  
  11. struct TextAttr NewFont = {
  12.     NULL,            /* Font Name        */
  13.     0,            /* Font Height        */
  14.     FS_NORMAL,        /* Style        */
  15.     FPF_DESIGNED };        /* Preferences        */
  16.  
  17.  
  18. char name[250];
  19.  
  20. main (argc, argv)
  21. int argc;
  22. char **argv;
  23. {
  24.     FILE *fp;
  25.     int i, j, count;
  26.     UWORD *w;
  27.     ULONG *l;
  28.  
  29.     if (argc != 4) {
  30.         printf ("Usage: %s fontname fontsize outfile\n",argv[0]);
  31.         printf ("(ie. %s diamond.font 20 DIAMOND.c)\n", argv[0]);
  32.         exit (0);
  33.     }
  34.  
  35.     NewFont.ta_Name = (STRPTR)argv[1];
  36.     NewFont.ta_YSize = atoi (argv[2]);
  37.  
  38.     if (( GfxBase = (struct GfxBase *)OpenLibrary ("graphics.library", LIBRARY_VERSION)) == NULL)
  39.         Quit ("Couldn't open graphics.library");
  40.  
  41.     if (( DiskfontBase = OpenLibrary ("diskfont.library", LIBRARY_VERSION)) == NULL)
  42.         Quit ("Couldn't open diskfont.library");
  43.  
  44.     if (( FontPtr = (struct TextFont *)OpenDiskFont (&NewFont)) == NULL)
  45.         Quit ("Couldn't open font");
  46.  
  47.     if (!( fp = fopen (argv[3], "w")))
  48.         Quit ("Couldn't open outfile");
  49.  
  50.     strcpy (name, "");
  51.     strncat (name, argv[1], strlen (argv[1]) - 5);
  52.     strcat (name, "Font");
  53.     name[0] = toupper (name[0]);
  54.  
  55.     fprintf (fp, "#include <graphics/text.h>\n\n");
  56.  
  57.     fprintf (fp, "static char fontname[] = \"%s\";\n\n", argv[1]);
  58.  
  59.     fprintf (fp, "static UWORD CharData[] = {\n");
  60.     w = (UWORD *)FontPtr->tf_CharData;
  61.     for (i=0; i<FontPtr->tf_YSize; i++) {
  62.         count = 0;
  63.         for (j = 0; j <FontPtr->tf_Modulo / 2; j++) {
  64.             if (count == 0) fprintf (fp, "\t");
  65.             fprintf (fp, "0x%04x,", *w++);
  66.             count++;
  67.             if (count == 8) {
  68.                 count = 0;
  69.                 fprintf (fp, "\n");
  70.             }
  71.         }
  72.         if (count) {
  73.             fprintf (fp, "\n");
  74.         }
  75.     }
  76.     fprintf (fp, "};\n\n");
  77.  
  78.     fprintf (fp, "static ULONG CharLoc[] = {\n");
  79.     l = (ULONG *)FontPtr->tf_CharLoc;
  80.     count = 0;
  81.     for (i=FontPtr->tf_LoChar; i<=FontPtr->tf_HiChar; i++) {
  82.         if (count == 0) fprintf (fp, "\t");
  83.         fprintf (fp, "0x%08x,", *l++);
  84.         count++;
  85.         if (count == 4) {
  86.             count = 0;
  87.             fprintf (fp, "\n");
  88.         }
  89.     }
  90.     if (count) {
  91.         fprintf (fp, "\n");
  92.     }
  93.     fprintf (fp, "};\n\n");
  94.  
  95.     w = (UWORD *)FontPtr->tf_CharSpace;
  96.     if (w) {
  97.         fprintf (fp, "static UWORD CharSpace[] = {\n");
  98.         count = 0;
  99.         for (i=FontPtr->tf_LoChar; i<=FontPtr->tf_HiChar; i++) {
  100.             if (count == 0) fprintf (fp, "\t");
  101.             fprintf (fp, "0x%04x,", *w++);
  102.             count++;
  103.             if (count == 8) {
  104.                 count = 0;
  105.                 fprintf (fp, "\n");
  106.             }
  107.         }
  108.         if (count) {
  109.             fprintf (fp, "\n");
  110.         }
  111.         fprintf (fp, "};\n\n");
  112.     }
  113.  
  114.     w = (UWORD *)FontPtr->tf_CharKern;
  115.     if (w) {
  116.         fprintf (fp, "static UWORD CharKern[] = {\n");
  117.         count = 0;
  118.         for (i=FontPtr->tf_LoChar; i<=FontPtr->tf_HiChar; i++) {
  119.             if (count == 0) fprintf (fp, "\t");
  120.             fprintf (fp, "0x%04x,", *w++);
  121.             count++;
  122.             if (count == 8) {
  123.                 count = 0;
  124.                 fprintf (fp, "\n");
  125.             }
  126.         }
  127.         if (count) {
  128.             fprintf (fp, "\n");
  129.         }
  130.         fprintf (fp, "};\n\n");
  131.     }
  132.  
  133.     fprintf (fp, "struct TextFont %s = {\n", name);
  134.     fprintf (fp, "\t{\t\t/* Message\t*/\n");
  135.     fprintf (fp, "\t\t{\t\t/* Node\t*/\n");
  136.     fprintf (fp, "\t\t\tNULL,\t\t/* ln_Succ\t*/\n");
  137.     fprintf (fp, "\t\t\tNULL,\t\t/* ln_Pred\t*/\n");
  138.     fprintf (fp, "\t\t\tNT_FONT,\t/* ln_Type\t*/\n");
  139.     fprintf (fp, "\t\t\t0,\t\t/* ln_Pri\t*/\n");
  140.     fprintf (fp, "\t\t\tfontname,\t/* ln_Name\t*/\n");
  141.     fprintf (fp, "\t\t},\n");
  142.     fprintf (fp, "\t\tNULL,\t\t\t/* mn_ReplyPort\t*/\n");
  143.     fprintf    (fp, "\t\tsizeof (%s) +\n", name);
  144.     fprintf    (fp, "\t\tsizeof (fontname) +\n");
  145.     fprintf    (fp, "\t\tsizeof (CharData) +\n");
  146.     fprintf    (fp, "\t\tsizeof (CharLoc) + \n");
  147.     if (FontPtr->tf_CharSpace) {
  148.         fprintf    (fp, "\t\tsizeof (CharSpace) +\n");
  149.     }
  150.     if (FontPtr->tf_CharKern) {
  151.         fprintf    (fp, "\t\tsizeof (CharKern) + \n");
  152.     }
  153.     fprintf (fp, "\t\t0,\t\t\t/* mn_Length\t*/\n");
  154.     fprintf (fp, "\t},\n");
  155.     fprintf (fp, "\t%u,\t\t/* tf_YSize\t*/\n", FontPtr->tf_YSize);
  156.     fprintf (fp, "\t%u,\t\t/* tf_Style\t*/\n", FontPtr->tf_Style);
  157.     fprintf (fp, "\t%u,\t\t/* tf_Flags\t*/\n", FontPtr->tf_Flags);
  158.     fprintf (fp, "\t%u,\t\t/* tf_XSize\t*/\n", FontPtr->tf_XSize);
  159.     fprintf (fp, "\t%u,\t\t/* tf_Baseline\t*/\n", FontPtr->tf_Baseline);
  160.     fprintf (fp, "\t%u,\t\t/* tf_BoldSmear\t*/\n", FontPtr->tf_BoldSmear);
  161.     fprintf (fp, "\t0,\t\t/* tf_Accessors\t*/\n");
  162.     fprintf (fp, "\t%u,\t\t/* tf_LoChar\t*/\n", FontPtr->tf_LoChar);
  163.     fprintf (fp, "\t%u,\t\t/* tf_HiChar\t*/\n", FontPtr->tf_HiChar);
  164.     fprintf (fp, "\t(APTR)&CharData,/* tf_CharData\t*/\n");
  165.     fprintf (fp, "\t%u,\t\t/* tf_Modulo\t*/\n", FontPtr->tf_Modulo);
  166.     fprintf (fp, "\t(APTR)&CharLoc,\t/* tf_CharLoc\t*/\n");
  167.     if (FontPtr->tf_CharSpace) {
  168.         fprintf (fp, "\t(APTR)&CharSpace,/*tf_CharSpace\t*/\n");
  169.     } else {
  170.         fprintf (fp, "\tNULL,\t\t/* tf_CharSpace\t*/\n");
  171.     }
  172.     if (FontPtr->tf_CharKern) {
  173.         fprintf (fp, "\t(APTR)&CharKern,/* tf_CharKern\t*/\n");
  174.     } else {
  175.         fprintf (fp, "\tNULL,\t\t/* tf_CharKern\t*/\n");
  176.     }
  177.     fprintf (fp, "};\n\n");
  178.  
  179.     fclose (fp);
  180.  
  181.     Quit (NULL);
  182. }
  183.  
  184. Quit (message)
  185. char *message;
  186. {
  187.     if (FontPtr)        CloseFont (FontPtr);
  188.     if (DiskfontBase)    CloseLibrary (DiskfontBase);
  189.     if (GfxBase)        CloseLibrary (GfxBase);
  190.  
  191.     if (message)
  192.         printf ("error: %s\n", message);
  193.  
  194.     exit (0);
  195. }    
  196.